package cn.itcast.customview.View;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import androidx.annotation.Nullable;

import cn.itcast.customview.R;

/*
一个视图从创建到显示过程中的主要方法
* 1.构造方法实例化类
* 2.测量-measure(int,int)-->onMeasure();
* 如果当前View是一个ViewGroup，还有义务测量孩子
* 孩子有建议权
* 3.指定位置-layout（）--->onLayout();
* 指定控件的位置，一般view不用写这个方法，viewGroup的时候才需要，一般的view不需要重写该方法
* 4.绘制视图-draw（）-->onDraw(canvas)
* 根据上面两个方法参数，进行绘制
* */

public class MvToggleButton extends View implements View.OnClickListener{

    private Bitmap backgroundBitmap;
    private Bitmap slidingBitmap;
    /*
    * 距离左边最大距离
    * */
    private int slidLeftMax;
    private Paint paint;//画笔
    private int slideLeft;

    private float startx;
    private float lastX;
    private boolean isOpen=false;
    /*
     * true:点击事件生效，滑动事件不生效
     * false:点击事件不生效，滑动事件生效
     * */
    private boolean isEnableClick=true;



/*
* 如果我们在布局文件使用该类，将会用这个构造方法实例该类，如果没有就崩溃
* */
    public MvToggleButton(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        initView();
    }

    private void initView(){
        paint=new Paint();
        paint.setAntiAlias(true);//设置抗锯齿
        backgroundBitmap= BitmapFactory.decodeResource(getResources(), R.drawable.ag);
        slidingBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.gk);
        slidLeftMax=backgroundBitmap.getWidth()-slidingBitmap.getWidth();

        setOnClickListener(this);

    }
/*
* 视图测量
* widthMeasureSpec
* heightMeasureSpec
* */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        setMeasuredDimension(backgroundBitmap.getWidth(),backgroundBitmap.getHeight());

    }

    /*
    * 绘制
    *  canvas
    * */

    @Override
    protected void onDraw(Canvas canvas) {
        /*super.onDraw(canvas);*/ //因为方法是空的，所以可以注释掉

        canvas.drawBitmap(backgroundBitmap,0,0,paint);
        canvas.drawBitmap(slidingBitmap,slideLeft,0,paint);
    }

    @Override
    public void onClick(View view) {

        if (isEnableClick){
            isOpen=!isOpen;
            flushView();
        }else{

        }




    }

    private void flushView() {
        if (isOpen){
            slideLeft=slidLeftMax;
        }else {
            slideLeft=0;
        }
        invalidate();//会导致onDraw()执行
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                //1.记录按下的坐标
                lastX=startx=event.getX();
                isEnableClick=true;
                break;
            case MotionEvent.ACTION_MOVE:
                //2.计算结束值
                float endX=event.getX();
                //3.计算偏移量
                float diatanceX=endX-startx;
//                slideLeft= (int) (slideLeft+diatanceX);
                slideLeft+= diatanceX;
                if (slideLeft<0){
                    slideLeft=0;
                }else if (slideLeft>slidLeftMax){
                    slideLeft=slidLeftMax;
                }
                //4.屏蔽非法值
                //5.刷新
                invalidate();
                //6.数据初始化
                startx=event.getX();

                if (Math.abs(endX-lastX)>5){
                    //滑动
                    isEnableClick=false;
                }
                break;
            case MotionEvent.ACTION_UP:
                if (!isEnableClick){
                    if (slideLeft>slidLeftMax/2){
                        //显示按钮开
                        isOpen=true;
                    }else {
                        isOpen=false;
                    }
                    flushView();
                }

                break;
        }
        return true;
    }
}
